// 父类
class Animal {
    public void makeSound() {
        System.out.println("动物发出声音");
    }
    
    public void eat() {
        System.out.println("动物在吃东西");
    }
}

// 子类
class Dog extends Animal {
    // 使用@Override重写父类方法
    @Override
    public void makeSound() {
        System.out.println("汪汪汪！");
    }
    
    @Override
    public void eat() {
        System.out.println("小狗在吃狗粮");
    }
    
    // 如果没有@Override，拼写错误不会被发现
    // public void makeSond() {  // 这里拼错了，但编译器不会报错
    //     System.out.println("这不是重写，而是新方法");
    // }
}

// 测试类
public class OverrideExample {
    public static void main(String[] args) {
        System.out.println("=== 测试@Override注解 ===");
        
        // 创建对象
        Animal animal = new Animal();
        Dog dog = new Dog();
        
        System.out.println("\n--- 父类Animal ---");
        animal.makeSound();
        animal.eat();
        
        System.out.println("\n--- 子类Dog（重写后）---");
        dog.makeSound();  // 调用重写后的方法
        dog.eat();        // 调用重写后的方法
        
        System.out.println("\n--- 多态性测试 ---");
        Animal animalDog = new Dog();  // 父类引用指向子类对象
        animalDog.makeSound();  // 调用的是Dog重写的方法
        animalDog.eat();        // 调用的是Dog重写的方法
    }
} 